from django.db import models

from web.views.utils import get_curtime


class User(models.Model):
    user_id = models.AutoField(db_column="user_id", primary_key=True, null=False)  # 用户id，不允许为空，主键，自增
    user_name = models.CharField(db_column="user_name", max_length=50, null=False)  # 用户名，最长50个字符，不允许为空
    password = models.CharField(db_column="password", max_length=50, null=False)  # 密码，最长50个字符，不允许为空
    create_time = models.DateTimeField(db_column="create_time", null=True)  # 创建时间
    is_delete = models.IntegerField(db_column="is_delete", default=0)  # 是否删除标记，默认为0
    delete_time = models.DateTimeField(db_column="delete_time", null=True)  # 删除时间
    user_level = models.IntegerField(db_column="user_level", default=0)  # 用户权限等级，默认为0

    # 在默认情况下，生成的表名：App_class, 如果要自定义 ，需要使用Class Meta来自定义
    class Meta:
        managed = True
        db_table = "User"

    @staticmethod
    def ensure_superadmin_exists():
        # 检查是否存在超级管理员
        if not User.objects.filter(user_name='superadmin', user_level=2, is_delete=0).exists():
            superadmin = User(user_name='superadmin', password='superadmin',
                              create_time=get_curtime(), is_delete=0,
                              user_level=2)
            # 执行添加
            superadmin.save()
        else:
            pass


class Warehouse(models.Model):
    warehouse_id = models.AutoField(db_column="warehouse_id", primary_key=True, null=False)  # 仓库id，不允许为空，主键，自增
    warehouse_name = models.CharField(db_column="warehouse_name", max_length=50, null=False)  # 仓库名，最长50个字符，不允许为空
    address = models.CharField(db_column="address", max_length=100, null=False)  # 仓库地址，最长100个字符，不允许为空
    commander = models.CharField(db_column="commander", max_length=50, null=False)  # 负责人，最长50个字符，不允许为空
    is_delete = models.IntegerField(db_column="is_delete", default=0)  # 是否删除标记，默认为0
    delete_time = models.DateTimeField(db_column="delete_time", null=True)  # 删除时间
    state = models.IntegerField(db_column="state", default=0)  # 仓库状态标记，取值0（正常），1（满仓），2（维护）
    remarks = models.CharField(db_column="remarks", max_length=100, null=True)  # 备注，最长100个字符，允许为空

    # 在默认情况下，生成的表名：App_class, 如果要自定义 ，需要使用Class Meta来自定义
    class Meta:
        managed = True
        db_table = "Warehouse"


class Order(models.Model):
    order_id = models.AutoField(db_column="order_id", primary_key=True, null=False)  # 订单id，不允许为空，主键，自增
    goods = models.CharField(db_column="goods", max_length=50, null=False)  # 商品名，最长50个字符，不允许为空
    create_time = models.DateTimeField(db_column="create_time", null=True)  # 创建时间
    end_time = models.DateTimeField(db_column="end_time", null=True)  # 截止时间
    warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE,
                                  to_field='warehouse_id')  # 归属仓库(外键)，最长50个字符，不允许为空
    commander = models.CharField(db_column="commander", max_length=50, null=False)  # 负责人，最长50个字符，不允许为空
    is_delete = models.IntegerField(db_column="is_delete", default=0)  # 是否删除标记，默认为0
    delete_time = models.DateTimeField(db_column="delete_time", null=True)  # 删除时间
    state = models.IntegerField(db_column="state", default=0)  # 订单状态标记，取值0（进行中），1（完成），2（逾期）
    remarks = models.CharField(db_column="remarks", max_length=100, null=True)  # 备注，最长100个字符，允许为空

    # 在默认情况下，生成的表名：App_class, 如果要自定义 ，需要使用Class Meta来自定义
    class Meta:
        managed = True
        db_table = "Order"


class Task(models.Model):
    task_id = models.AutoField(db_column="task_id", primary_key=True, null=False)  # 任务id，不允许为空，主键，自增
    task_name = models.CharField(db_column="task_name", max_length=50, null=False)  # 任务名称，最长50个字符，不允许为空
    task_type = models.IntegerField(db_column="task_type", default=0)  # 任务类型，取值0（入库），1（出库）
    goods = models.CharField(db_column="goods", max_length=50, null=False)  # 货物类型，最长50个字符，不允许为空
    # 货物来源或者目的地，如果是出库任务，对应目的地，如果是入库任务，对应来源，最长50个字符，不允许为空
    sourceOrDestination = models.CharField(db_column="sourceOrDestination", max_length=50, null=False)
    goods_num = models.CharField(db_column="goods_num", max_length=50, null=False)  # 货物数量，最长50个字符，不允许为空
    shippingMethod = models.IntegerField(db_column="shippingMethod", default=0)  # 托运方式，取值0（陆运），1（海运），2（航运）
    warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE,
                                  to_field='warehouse_id')  # 归属仓库(外键)，最长50个字符，不允许为空
    order = models.ForeignKey(Order, on_delete=models.CASCADE,
                              to_field='order_id')  # 所属订单(外键)，最长50个字符，不允许为空

    is_delete = models.IntegerField(db_column="is_delete", default=0)  # 是否删除标记，默认为0
    delete_time = models.DateTimeField(db_column="delete_time", null=True)  # 删除时间

    # 在默认情况下，生成的表名：App_class, 如果要自定义 ，需要使用Class Meta来自定义
    class Meta:
        managed = True
        db_table = "Task"
